define([ "Zepto", "underscore", "Backbone", "Handlebars",
	           "models/session",
	           "views/common/eventslistview",
	           "views/common/updateslistview",
	           "collections/corsostudentecollection",
	           "collections/corsocollection",
        	   "collections/orariocorsocollection",
        	   "models/ricevimentodocente",
        	   "collections/utentecollection",
        	   "collections/studenteappuntamentodocentecollection",
        	   "collections/avvisocollection",
               "text!templates/common/menu-private.html",
               "text!templates/common/menu-public.html",
        ], function($, _, Backbone, Handlebars,
               Session, EventsListView, UpdatesListView, CorsostudenteCollection, CorsoCollection, OrariocorsoCollection, Ricevimentodocente, DocenteCollection, StudenteAppuntamentoCollection, AvvisoCollection, templatePrivate, templatePublic) {

       var MenuView = Backbone.View.extend({

            	render : function(eventName) {
                    if(Session.getAuth()) {
                        this.template = Handlebars.compile(templatePrivate);
                        this.$el.html(this.template({corsolaurea:Session.getAuth().corsolaurea.objectId}));
                    } else {
                        this.template = Handlebars.compile(templatePublic);
                        this.$el.html(this.template);
                    }
                    
                    return this;
               	},

    //            	postRender : function(eevnt) {
    //            		var scrollableframe = new iScroll('scrollablebubble', {
				// ﻿  ﻿  ﻿  ﻿  useTransition : false,
				// ﻿  ﻿  ﻿  ﻿  checkDOMChanges : true,
				// ﻿  ﻿  ﻿  ﻿  hideScrollbar : true,
				// ﻿  ﻿  ﻿  ﻿  fixedScrollbar : true,
				// ﻿  ﻿  ﻿  ﻿  bounceLock : false });
    //            	},

                events: {
		            'touchstart #events': 'toggleEvents',
		            'touchstart #updates': 'toggleUpdates',
		            'touchstart .button': 'over',
		            'touchend .button': 'left',
		            'touchcancel .button': 'left',
		            'touchstart button': 'over',
		            'touchend button': 'left',
		            'touchcancel button': 'left',
		            'touchstart .bubble-item' : 'over',
					﻿'touchend .bubble-item' : 'left',
					﻿'touchcancel .bubble-item' : 'left',
		        },

		        toggleEvents: function(event) {
		        	$('#updates').removeClass('clicked');
                    $('#events').toggleClass('clicked');
                    if($('#events').hasClass('clicked')) {
                    	$('#bubblescroller').empty();
                    	var scrollableframe = new iScroll('scrollablebubble', {
					﻿  ﻿  ﻿  ﻿  useTransition : false,
					﻿  ﻿  ﻿  ﻿  checkDOMChanges : true,
					﻿  ﻿  ﻿  ﻿  hideScrollbar : true,
					﻿  ﻿  ﻿  ﻿  fixedScrollbar : true,
					﻿  ﻿  ﻿  ﻿  bounceLock : false });

                        // $('#bubble').show();

                        if(Session.getAuth().isdocente) {
                        	//Docente
                        	//  ******** Lezioni *******
                        	var corsoCollection = new CorsoCollection();
							corsoCollection.fetch({
								query : {
									isattivo: true,
									docente: {"__type":"Pointer","className":"_User","objectId":Session.getAuth().objectId}
				               	},
				               	success: function(data) {
				                	//alert('N. corsi attivi tenuti: ' + data.length);
				                	// $('#bubblescroller').empty();

				                	// per ogni corso tenuto
									data.each(function(element){ 
									 	//alert('id_corso: ' + element.get('objectId'));
							            var d= new Date();
							            var oraCorrente = parseInt(d.getHours()) + parseInt(d.getMinutes())/60;

							            var weekday = ["Dom","Lun","Mar","Mer","Gio","Ven","Sab"];
							            var day = weekday[d.getDay()];

							            this.orarioCollection = new OrariocorsoCollection();
							            this.orarioCollection.fetch({
							                query : {
							                    orainizio : {"$gte": oraCorrente},
							                    weekday: day,
							                    corso: {"__type":"Pointer","className":"corso","objectId":element.get('objectId')}
							                },
							                include: 'corso',
							                //order: '-orainizio',
							                success: function(model, response) {
							                    var itemsView = new EventsListView({
													el : $('#bubblescroller', this.el),
													model : model
												});
												itemsView.render();
												//itemsView.postRender();
							                },
							                error: function(model, response){
							                    alert('error: ' + response.responseText);
							                }
							            });

									});
								}});

							//  ******** Appuntamenti *******
							var appuntamento = new StudenteAppuntamentoCollection();
							// alert('idricevimento: ' + Session.getAuth().ricevimento.objectId);
							appuntamento.fetch({
								query : {
									ricevimentodocente: {"__type":"Pointer","className":"ricevimentodocente","objectId":Session.getAuth().ricevimento.objectId}
				               	},
				               	include : 'utente',          //Include un oggetto di tipo Puntatore
				               	success: function(data) {
				                	//alert('N. appuntamenti' + data.length);
				                	//$('#bubblescroller').empty();

				                	// per ogni appuntamento
									data.each(function(element){ 
									 	//alert('id_studente: ' + element.get('utente').objectId);
									 	var ricevimento = new Ricevimentodocente({objectId : Session.getAuth().ricevimento.objectId});
									 	ricevimento.fetch({
									 		success: function(data) {
									 			// alert('ricevimento: ' + data.get('weekday') + ' ' + data.get('objectId'));
									 			var d= new Date();
									 			var weekday = ["Dom","Lun","Mar","Mer","Gio","Ven","Sab"];
									            var day = weekday[d.getDay()];

									            var wday = data.get('weekday');
						            			if(wday == "Lun"){ k = 1; }
						            			else if(wday == "Mar"){ k = 2; }
						            			else if(wday == "Mer"){ k = 3; }
						            			else if(wday == "Gio"){ k = 4; }
						            			else if(wday == "Ven"){ k = 5; }

						            			var n = d.getDay();
					        					//var diff = (n <= k) ? k-n+1 : n-k+1;
 												
 												d.setDate(d.getDate() - 6 + k - n);
												// alert(element.get('createdAt')); //Giorno in cui ho preso l'appuntamento
												// alert(d.toISOString());

												var str = element.get('createdAt');
											    var iso = str.split('-');
											    var dataCreazioneApp = new Date(parseInt(iso[0], 10), parseInt(iso[1], 10) - 1, parseInt(iso[2], 10));

											    var orainizio, orafine;
									            if(data.get('weekday') == day && dataCreazioneApp >= d) {
									            	//alert('aggiungo alla lista');
									            	if(data.get('orainizio')) {
										                var ora_decimale = data.get('orainizio');
										                var ora = parseInt(ora_decimale);
										                ora_decimale = (ora_decimale - ora) * 60;
										                var minuti = parseInt(ora_decimale);
										                if(minuti == 0) minuti = "00";
										                orainizio = ora + ":" + minuti;
										            }
										            if(data.get('orafine')) {
										                var ora_decimale = data.get('orafine');
										                var ora = parseInt(ora_decimale);
										                ora_decimale = (ora_decimale - ora) * 60;
										                var minuti = parseInt(ora_decimale);
										                if(minuti == 0) minuti = "00";
										                orafine = ora + ":" + minuti;
										            }

										            var url = "resources/img/contactdefault.png";
										            if(element.get('utente').immagine) url = element.get('utente').immagine.url;

									            	$('#bubblescroller').append('<div class="bubble-item">'
									            			+'<a href="#user/' + element.get('utente').objectId + '">'
											                +'<img class="picture" src="' + url + '">'
											                +'<ul>'
											                +'    <li class="title">' + element.get('utente').nome + ' ' +element.get('utente').cognome + '</li>'
											                +'    <li class="desc">Appuntamento: ' + day + '  ' + orainizio + ' - ' + orafine + '</li>'
											                +'</ul></a></div>');
									            }
									 		}
									 	});

									});
								}});
                        } else {
                        	//Studente
                        	//  ******** Lezioni *******
                        	var corsostudenteCollection = new CorsostudenteCollection();
							corsostudenteCollection.fetch({
								query : {
									terminato: false,
									notifica: true,
									utente: {"__type":"Pointer","className":"_User","objectId":Session.getAuth().objectId}
				               	},
				               	//include : 'corso',          //Include un oggetto di tipo Puntatore
				               	success: function(data) {
				                	// alert('N. corsi attivi seguiti' + data.length);
				                	$('#bubblescroller').empty();

				                	// per ogni corso seguito
									data.each(function(element){ 
									 	//alert('id_corso: ' + element.get('corso').objectId);
							            var d= new Date();
							            var oraCorrente = parseInt(d.getHours()) + parseInt(d.getMinutes())/60;

							            var weekday = ["Dom","Lun","Mar","Mer","Gio","Ven","Sab"];
							            var day = weekday[d.getDay()];

							            this.orarioCollection = new OrariocorsoCollection();
							            this.orarioCollection.fetch({
							                query : {
							                    orainizio : {"$gte": oraCorrente},
							                    weekday: day,
							                    corso: {"__type":"Pointer","className":"corso","objectId":element.get('corso').objectId}
							                },
							                include: 'corso',
							                //order: '-orainizio',
							                success: function(model, response) {
							                    var itemsView = new EventsListView({
													el : $('#bubblescroller', this.el),
													model : model
												});
												itemsView.render();
												//itemsView.postRender();
							                },
							                error: function(model, response){
							                    alert('error: ' + response.responseText);
							                }
							            });

									});
								}});

							//  ******** Appuntamento *******
							var appuntamento = new StudenteAppuntamentoCollection();
							appuntamento.fetch({
								query : {
									utente: {"__type":"Pointer","className":"_User","objectId":Session.getAuth().objectId}
				               	},
				               	include : 'ricevimentodocente',          //Include un oggetto di tipo Puntatore
				               	success: function(data) {
				                	// alert('N. appuntamenti' + data.length);
				                	//$('#bubblescroller').empty();

				                	// per ogni appuntamento
									data.each(function(element){ 
									 	// alert('id_corso: ' + element.get('corso').objectId);		
									 	var ricevimento = new Ricevimentodocente({objectId : element.get('ricevimentodocente').objectId});
									 	ricevimento.fetch({
									 		success: function(data) {
									 			// alert('ricevimento: ' + data.get('weekday') + ' ' + data.get('objectId'));
									 			var d= new Date();
									 			var weekday = ["Dom","Lun","Mar","Mer","Gio","Ven","Sab"];
									            var day = weekday[d.getDay()];

									            var wday = data.get('weekday');
						            			if(wday == "Lun"){ k = 1; }
						            			else if(wday == "Mar"){ k = 2; }
						            			else if(wday == "Mer"){ k = 3; }
						            			else if(wday == "Gio"){ k = 4; }
						            			else if(wday == "Ven"){ k = 5; }

						            			var n = d.getDay();
					        					//var diff = (n <= k) ? k-n+1 : n-k+1;
 												
 												d.setDate(d.getDate() - 6 + k - n);
												// alert(element.get('createdAt')); //Giorno in cui ho preso l'appuntamento
												// alert(d.toISOString());

												var str = element.get('createdAt');
											    var iso = str.split('-');
											    var dataCreazioneApp = new Date(parseInt(iso[0], 10), parseInt(iso[1], 10) - 1, parseInt(iso[2], 10));

											    var orainizio, orafine;
									            if(data.get('weekday') == day && dataCreazioneApp >= d) {
									            	//alert('aggiungo alla lista');
									            	var docente = new DocenteCollection();
												 	docente.fetch({
												 		query : {
												 			ricevimento: {"__type":"Pointer","className":"ricevimentodocente","objectId":data.get('objectId')}
												 		},
												 		success: function(docData) {
											            	if(data.get('orainizio')) {
												                var ora_decimale = data.get('orainizio');
												                var ora = parseInt(ora_decimale);
												                ora_decimale = (ora_decimale - ora) * 60;
												                var minuti = parseInt(ora_decimale);
												                if(minuti == 0) minuti = "00";
												                orainizio = ora + ":" + minuti;
												            }
												            if(data.get('orafine')) {
												                var ora_decimale = data.get('orafine');
												                var ora = parseInt(ora_decimale);
												                ora_decimale = (ora_decimale - ora) * 60;
												                var minuti = parseInt(ora_decimale);
												                if(minuti == 0) minuti = "00";
												                orafine = ora + ":" + minuti;
												            }
												            var docmodel = docData.pop();

												            var url = "resources/img/contactdefault.png";
												            if(docmodel.get('immagine')) url = docmodel.get('immagine').url;

											            	$('#bubblescroller').append('<div class="bubble-item">'
											            			+'<a href="#user/' + docmodel.get('objectId') + '">'
													                +'<img class="picture" src="' + url + '">'
													                +'<ul>'
													                +'    <li class="title">' + docmodel.get('nome') + ' ' + docmodel.get('cognome') + '</li>'
													                +'    <li class="desc">Appuntamento: ' + day + '  ' + orainizio + ' - ' + orafine + '</li>'
													                +'</ul></a></div>');
											            }
											        });
									            }
									 		}
									 	});

									});
								}});
                        }
                     	$('#bubble').show();   
                    } else
                        $('#bubble').hide();
		        }, 

		        toggleUpdates: function(event) {
		        	$('#events').removeClass('clicked');
                    $('#updates').toggleClass('clicked');
                    if($('#updates').hasClass('clicked')) {
                    	$('#bubblescroller').empty();
                    	var scrollableframe = new iScroll('scrollablebubble', {
					﻿  ﻿  ﻿  ﻿  useTransition : false,
					﻿  ﻿  ﻿  ﻿  checkDOMChanges : true,
					﻿  ﻿  ﻿  ﻿  hideScrollbar : true,
					﻿  ﻿  ﻿  ﻿  fixedScrollbar : true,
					﻿  ﻿  ﻿  ﻿  bounceLock : false });

                    	//Studente
                    	if(!Session.getAuth().isdocente) {
                    		//  ******** Avvisi *******
                        	var corsostudenteCollection = new CorsostudenteCollection();
							corsostudenteCollection.fetch({
								query : {
									terminato: false,
									notifica: true,
									utente: {"__type":"Pointer","className":"_User","objectId":Session.getAuth().objectId}
				               	},
				               	success: function(data) {
				                	// alert('N. corsi attivi seguiti' + data.length);
				                	// $('#bubblescroller').empty();

				                	// per ogni corso seguito
									data.each(function(element){ 
									 	//alert('id_corso: ' + element.get('corso').objectId);

							            this.avvisi = new AvvisoCollection();
							            this.avvisi.fetch({
							                query : {
							                    corso: {"__type":"Pointer","className":"corso","objectId":element.get('corso').objectId}
							                },
							                include: 'corso',
							                success: function(model, response) {
							                    var itemsView = new UpdatesListView({
													el : $('#bubblescroller', this.el),
													model : model
												});
												itemsView.render();
												//itemsView.postRender();
							                },
							                error: function(model, response){
							                    alert('error: ' + response.responseText);
							                }
							            });

									});
								}});

                    	}

                        $('#bubble').show();
                    } else
                        $('#bubble').hide();
		        }, 

		        over: function(event) {
		            $(event.currentTarget).addClass('fake-active');
		        },

		        left: function(event) {
		            $(event.currentTarget).removeClass('fake-active');
		        }

       });


	return MenuView;
});